package dominio;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.*;

/**
 * @author DEVAIR
 * @version 1.0 @created 02-nov-2013 16:59:06
 */
@Entity
@Table(name = "usuario")
@SequenceGenerator(name = "usuarioseq", initialValue = 1, allocationSize = 1)
@NamedQueries({
    @NamedQuery(name = "filtrousuario", query
            = "select e from UsuarioMd e where LOWER (e.nome) like LOWER(:texto) or LOWER(e.sobrenome) like LOWER(:texto) "
            + "or LOWER(e.login) like LOWER(:texto)"),
    @NamedQuery(name = "filtrologin", query = "select e from UsuarioMd e where e.login = :login and e.senha = :senha")
})
public class UsuarioMd implements Serializable, Comparable<UsuarioMd> {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "usuarioseq")
    @Column(name = "id")
    private long id;
    @Column(name = "nome", length = 30, nullable = false)
    private String nome;
    @Column(name = "sobrenome", length = 80, nullable = false)
    private String sobrenome;
    @Column(name = "login", length = 50, nullable = false)
    private String login;
    @Column(name = "senha", length = 100, nullable = false)
    private String senha;
    @Column(name = "email", length = 100)
    private String email;

    @Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "data_nascimento")
    private Date dataNascimento;

    @Column(name = "caminho_foto")
    private String caminhoFoto;

    /*
    @OneToMany
    @JoinColumn(name = "id")
    private List<ArquivoMd> arquivos;
    */        
      
    @ManyToMany(mappedBy = "usuarios")
    private List<CompromissoMd> compromissos = new ArrayList<CompromissoMd>();
       
    
    @ManyToOne
    @JoinColumn(name = "grupo_id", unique = false)
    private GrupoUsuarioMd grupo;

    @ManyToOne
    @JoinColumn(name = "departamento_id", unique = false)
    private DepartamentoMd departamento;

    /**
     * @return the id
     */
    public long getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(long id) {
        this.id = id;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the sobrenome
     */
    public String getSobrenome() {
        return sobrenome;
    }

    /**
     * @param sobrenome the sobrenome to set
     */
    public void setSobrenome(String sobrenome) {
        this.sobrenome = sobrenome;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the dataNascimento
     */
    public Date getDataNascimento() {
        return dataNascimento;
    }

    /**
     * @param dataNascimento the dataNascimento to set
     */
    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    /**
     * @return the caminhoFoto
     */
    public String getCaminhoFoto() {
        return caminhoFoto;
    }

    /**
     * @param caminhoFoto the caminhoFoto to set
     */
    public void setCaminhoFoto(String caminhoFoto) {
        this.caminhoFoto = caminhoFoto;
    }

    /**
     * @return the compromissos
     */
    public List<CompromissoMd> getCompromissos() {
        return compromissos;
    }

    /**
     * @param compromissos the compromissos to set
     */
    public void setCompromissos(List<CompromissoMd> compromissos) {
        this.setCompromissos(compromissos);
    }
  
    /**
     * @return the login
     */
    public String getLogin() {
        return login;
    }

    /**
     * @param login the login to set
     */
    public void setLogin(String login) {
        this.login = login;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the grupo
     */
    public GrupoUsuarioMd getGrupo() {
        return grupo;
    }

    /**
     * @param grupo the grupo to set
     */
    public void setGrupo(GrupoUsuarioMd grupo) {
        this.grupo = grupo;
    }

    /**
     * @return the departamento
     */
    public DepartamentoMd getDepartamento() {
        return departamento;
    }

    /**
     * @param departamento the departamento to set
     */
    public void setDepartamento(DepartamentoMd departamento) {
        this.departamento = departamento;
    }

    @Override
    public int compareTo(UsuarioMd o) {

        int compara = o.getNome().compareTo(this.getNome());
        /*
         if (compara > 1) {
         compara = 1;

         } else {
         if (compara < 1) {
         compara = -1;
         }
         }
         */
        return compara;

    }

}
